#include<stdio.h>
#include<unistd.h>
#include<stdlib.h>
#include<sys/wait.h>
#include<sys/types.h>

int main()
{
  pid_t id=fork();
  if(id==0)
  {
    //id==0:子进程
    int cnt=5;
    while(1)
    {
      printf("我是子进程，我的pid：%d, 我的父进程ppid:%d\n",getpid(),getppid());
      sleep(1);
      cnt--;
      if(!cnt)
      {
        break;
      }
    }
    exit(10);
  }
  else
  { 
    //id>0:父进程
      printf("我是父进程，我的pid：%d, 我的父进程ppid:%d\n",getpid(),getppid());
      printf("我准备等待子进程\n");
      int status=0;
      pid_t ret=waitpid(id,&status,0);
      if(ret>0)
      {
        if(WIFEXITED(status))
        {
        printf("子进程是正常退出的,退出码：%d\n",WEXITSTATUS(status));
        printf("等待成功！ret: %d,我所等待的子进程的退出码：%d ,退出信号：%d\n",
                          ret,(status>>8)&0xFF,status&0x7F); //取出status的低16位,以及低16位的前7位（终止信号）
        }
      }
    //  sleep(40);
    //  pid_t ret=wait(NULL);
    //  if(ret<0)
    //  {
    //    printf("等待失败！\n");
    //  }
    //  else
    //  {
    //    printf("等待成功！ result: %d\n",ret);
    //  }
    //  sleep(20);
    
  }
  return 0;
}
